﻿
#ifndef SECTION_TABLE_H_7E4487D94D7DAA53
#define SECTION_TABLE_H_7E4487D94D7DAA53  1

#include "UniverTab.h"
#include "Coff.h"

class CoffRelInfoEntry;

class Section : public UniverTabItem
{
public:
    N2PoolString    m_secName;                              // 节名
    n2u32           m_offsetInObj;                          // 位于obj文件中的偏移
    n2u32           m_secDataSize;                          // 节的数据的大小
    n2u32           m_flags;                                // 标志
    n2u32           m_relInfoOffset;                        // 重定位信息的偏移
    n2u32           m_relInfoCount;                         // 重定位信息个数
    ////////
    n2u32           m_globalSectionId;                      // 全局section ID
    n2u32           m_objFileIndex;                         // section所在的OBJ在OBJ列表的索引
    CoffRelInfoEntry* m_relInfoTab;                         // 存放重定位信息表数组

    Section();
    Section(const Coff32_Shdr *pCoff32Section, const char * name);
    virtual ~Section();
    unsigned int   getAlignValue();
protected:
    virtual void moveFrom(UniverTabItem *p);
    virtual void copyFrom(const UniverTabItem *p);
    virtual UniverTabItem * getOffsetItem(size_t index);
};

class SectionTable : public UniverTab
{
protected:
    virtual UniverTabItem* allocGroupData(size_t count);
public:
    Section* getSection(size_t index);
    SectionTable(size_t  groupCubage);
    SectionTable();
};

extern SectionTable * allsections;

#define COFF_SECTION_ATTR_UNINIT_DATA                   0x80
#define COFF_SECTION_ATTR_COMDAT                        0x1000




#endif // SECTION_TABLE_H_7E4487D94D7DAA53


